home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / Windows files / Q3WinSDK.exe / QD3DSDK / Interfaces / QD3DGeometry.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-20  |  62.2 KB  |  2,060 lines

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DGeometry.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Geometric primitives - data structures and routines         **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1991-1996 Apple Computer, Inc. All rights reserved.     **
  11.  **                                                                             **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DGeometry_h
  15. #define QD3DGeometry_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DSet.h"
  22.  
  23. #if defined(THINK_C) || defined(__SC__)
  24.     #pragma options(!pack_enums, !align_arrays)
  25.     #pragma SC options align=power
  26. #elif defined(__MWERKS__)
  27.     #pragma enumsalwaysint on
  28.     #pragma align_array_members off
  29.     #pragma options align=native
  30. #elif defined(__PPCC__)
  31.     #pragma options align=power
  32. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  33.     #pragma options enum=int
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif    /* __cplusplus */
  39.  
  40. /******************************************************************************
  41.  **                                                                             **
  42.  **                                Geometry Routines                             **
  43.  **                                                                             **
  44.  *****************************************************************************/
  45.  
  46. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3Geometry_GetType(
  47.     TQ3GeometryObject    geometry);
  48.  
  49. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_GetAttributeSet(
  50.     TQ3GeometryObject    geometry,
  51.     TQ3AttributeSet        *attributeSet);
  52.  
  53. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_SetAttributeSet(
  54.     TQ3GeometryObject    geometry,
  55.     TQ3AttributeSet        attributeSet);
  56.  
  57. QD3D_EXPORT TQ3Status QD3D_CALL Q3Geometry_Submit(
  58.     TQ3GeometryObject    geometry, 
  59.     TQ3ViewObject        view);
  60.  
  61.  
  62. /******************************************************************************
  63.  **                                                                             **
  64.  **                            Box    Data Structure Definitions                     **
  65.  **                                                                             **
  66.  *****************************************************************************/
  67.  
  68. typedef struct TQ3BoxData {
  69.     TQ3Point3D            origin;
  70.     TQ3Vector3D            orientation;
  71.     TQ3Vector3D            majorAxis;
  72.     TQ3Vector3D            minorAxis;
  73.     TQ3AttributeSet        *faceAttributeSet;    /* Ordering : Left, right,     */
  74.                                             /*              front, back,     */
  75.                                             /*              top, bottom    */
  76.     TQ3AttributeSet        boxAttributeSet;
  77. } TQ3BoxData;
  78.  
  79.  
  80. /******************************************************************************
  81.  **                                                                             **
  82.  **                                Box Routines                                 **
  83.  **                                                                             **
  84.  *****************************************************************************/
  85.  
  86. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Box_New(
  87.     const TQ3BoxData    *boxData);
  88.  
  89. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_Submit(
  90.     const TQ3BoxData    *boxData,
  91.     TQ3ViewObject        view);
  92.     
  93. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetData(
  94.     TQ3GeometryObject    box, 
  95.     const TQ3BoxData    *boxData);
  96.  
  97. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetData(
  98.     TQ3GeometryObject    box,
  99.     TQ3BoxData            *boxData);
  100.  
  101. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_EmptyData(
  102.     TQ3BoxData            *boxData);
  103.     
  104. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetOrigin(
  105.     TQ3GeometryObject    box,
  106.     const TQ3Point3D    *origin);
  107.  
  108. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetOrientation(
  109.     TQ3GeometryObject    box,
  110.     const TQ3Vector3D    *orientation);
  111.  
  112. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetMajorAxis(
  113.     TQ3GeometryObject    box,
  114.     const TQ3Vector3D    *majorAxis);
  115.  
  116. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetMinorAxis(
  117.     TQ3GeometryObject    box,
  118.     const TQ3Vector3D    *minorAxis);
  119.  
  120. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetOrigin(
  121.     TQ3GeometryObject    box,
  122.     TQ3Point3D            *origin);
  123.  
  124. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetOrientation(
  125.     TQ3GeometryObject    box,
  126.     TQ3Vector3D            *orientation);
  127.  
  128. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetMajorAxis(
  129.     TQ3GeometryObject    box,
  130.     TQ3Vector3D            *majorAxis);
  131.  
  132. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetMinorAxis(
  133.     TQ3GeometryObject    box,
  134.     TQ3Vector3D            *minorAxis);
  135.  
  136. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_GetFaceAttributeSet(
  137.     TQ3GeometryObject    box,
  138.     unsigned long        faceIndex,
  139.     TQ3AttributeSet        *faceAttributeSet);
  140.  
  141. QD3D_EXPORT TQ3Status QD3D_CALL Q3Box_SetFaceAttributeSet(
  142.     TQ3GeometryObject    box,
  143.     unsigned long        faceIndex,
  144.     TQ3AttributeSet        faceAttributeSet);
  145.  
  146.  
  147. /******************************************************************************
  148.  **                                                                             **
  149.  **                        Cone Data Structure Definitions                          **
  150.  **                                                                             **
  151.  *****************************************************************************/
  152.  
  153. typedef struct TQ3ConeData {
  154.     TQ3Point3D            origin;
  155.     TQ3Vector3D            orientation;
  156.     TQ3Vector3D            majorRadius;
  157.     TQ3Vector3D            minorRadius;
  158.     float                uMin, uMax,
  159.                         vMin, vMax;
  160.     TQ3EndCap            caps;
  161.     TQ3AttributeSet        interiorAttributeSet;
  162.     TQ3AttributeSet        faceAttributeSet;
  163.     TQ3AttributeSet        bottomAttributeSet;
  164.     TQ3AttributeSet        coneAttributeSet;
  165. } TQ3ConeData;
  166.  
  167.  
  168. /******************************************************************************
  169.  **                                                                             **
  170.  **                                Cone Routines                                 **
  171.  **                                                                             **
  172.  *****************************************************************************/
  173.  
  174. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Cone_New(
  175.     const TQ3ConeData        *coneData);
  176.  
  177. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_Submit(
  178.     const TQ3ConeData        *coneData, 
  179.     TQ3ViewObject            view);
  180.  
  181. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetData(
  182.     TQ3GeometryObject        cone, 
  183.     const TQ3ConeData        *coneData);
  184.  
  185. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetData(
  186.     TQ3GeometryObject        cone,
  187.     TQ3ConeData                *coneData);
  188.  
  189. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetOrigin(
  190.     TQ3GeometryObject        cone,
  191.     const TQ3Point3D        *origin);
  192.  
  193. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetOrientation(
  194.     TQ3GeometryObject        cone,
  195.     const TQ3Vector3D        *orientation);
  196.  
  197. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetMajorRadius(
  198.     TQ3GeometryObject        cone,
  199.     const TQ3Vector3D        *majorRadius);
  200.  
  201. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetMinorRadius(
  202.     TQ3GeometryObject        cone,
  203.     const TQ3Vector3D        *minorRadius);
  204.  
  205. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetOrigin(
  206.     TQ3GeometryObject        cone,
  207.     TQ3Point3D                *origin);
  208.  
  209. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetOrientation(
  210.     TQ3GeometryObject        cone,
  211.     TQ3Vector3D                *orientation);
  212.  
  213. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetMajorRadius(
  214.     TQ3GeometryObject        cone,
  215.     TQ3Vector3D                *majorRadius);
  216.  
  217. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetMinorRadius(
  218.     TQ3GeometryObject        cone,
  219.     TQ3Vector3D                *minorRadius);
  220.     
  221. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetCaps(
  222.     TQ3GeometryObject        cone,
  223.     TQ3EndCap                caps);
  224.  
  225. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetCaps(
  226.     TQ3GeometryObject        cone,
  227.     TQ3EndCap                *caps);
  228.  
  229. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetBottomAttributeSet(
  230.     TQ3GeometryObject        cone,
  231.     TQ3AttributeSet            bottomAttributeSet);
  232.  
  233. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetBottomAttributeSet(
  234.     TQ3GeometryObject        cone,
  235.     TQ3AttributeSet            *bottomAttributeSet);
  236.  
  237. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_SetFaceAttributeSet(
  238.     TQ3GeometryObject        cone,
  239.     TQ3AttributeSet            faceAttributeSet);
  240.  
  241. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_GetFaceAttributeSet(
  242.     TQ3GeometryObject        cone,
  243.     TQ3AttributeSet            *faceAttributeSet);
  244.  
  245. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cone_EmptyData(
  246.     TQ3ConeData                *coneData);
  247.  
  248.  
  249. /******************************************************************************
  250.  **                                                                             **
  251.  **                        Cylinder Data Structure Definitions                     **
  252.  **                                                                             **
  253.  *****************************************************************************/
  254.  
  255. typedef struct TQ3CylinderData {
  256.     TQ3Point3D            origin;
  257.     TQ3Vector3D            orientation;
  258.     TQ3Vector3D            majorRadius;
  259.     TQ3Vector3D            minorRadius;
  260.     float                uMin, uMax,
  261.                         vMin, vMax;
  262.     TQ3EndCap             caps;
  263.     TQ3AttributeSet        interiorAttributeSet;
  264.     TQ3AttributeSet        topAttributeSet;
  265.     TQ3AttributeSet        faceAttributeSet;
  266.     TQ3AttributeSet        bottomAttributeSet;
  267.     TQ3AttributeSet        cylinderAttributeSet;
  268. } TQ3CylinderData;
  269.  
  270.  
  271. /******************************************************************************
  272.  **                                                                             **
  273.  **                            Cylinder Routines                                 **
  274.  **                                                                             **
  275.  *****************************************************************************/
  276.  
  277. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Cylinder_New(
  278.     const TQ3CylinderData    *cylinderData);
  279.  
  280. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_Submit(
  281.     const TQ3CylinderData    *cylinderData,
  282.     TQ3ViewObject            view);
  283.     
  284. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetData(
  285.     TQ3GeometryObject        cylinder, 
  286.     const TQ3CylinderData    *cylinderData);
  287.  
  288. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetData(
  289.     TQ3GeometryObject        cylinder,
  290.     TQ3CylinderData            *cylinderData);
  291.  
  292. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetOrigin(
  293.     TQ3GeometryObject        cylinder,
  294.     const TQ3Point3D        *origin);
  295.  
  296. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetOrientation(
  297.     TQ3GeometryObject        cylinder,
  298.     const TQ3Vector3D        *orientation);
  299.  
  300. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetMajorRadius(
  301.     TQ3GeometryObject        cylinder,
  302.     const TQ3Vector3D        *majorRadius);
  303.  
  304. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetMinorRadius(
  305.     TQ3GeometryObject        cylinder,
  306.     const TQ3Vector3D        *minorRadius);
  307.  
  308. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetOrigin(
  309.     TQ3GeometryObject        cylinder,
  310.     TQ3Point3D                *origin);
  311.  
  312. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetOrientation(
  313.     TQ3GeometryObject        cylinder,
  314.     TQ3Vector3D                *orientation);
  315.  
  316. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetMajorRadius(
  317.     TQ3GeometryObject        cylinder,
  318.     TQ3Vector3D                *majorRadius);
  319.  
  320. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetMinorRadius(
  321.     TQ3GeometryObject        cylinder,
  322.     TQ3Vector3D                *minorRadius);
  323.  
  324. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetCaps(
  325.     TQ3GeometryObject        cylinder,
  326.     TQ3EndCap                caps);
  327.  
  328. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetCaps(
  329.     TQ3GeometryObject        cylinder,
  330.     TQ3EndCap                *caps);
  331.  
  332. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetTopAttributeSet(
  333.     TQ3GeometryObject        cylinder,
  334.     TQ3AttributeSet            topAttributeSet);
  335.  
  336. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetTopAttributeSet(
  337.     TQ3GeometryObject        cylinder,
  338.     TQ3AttributeSet            *topAttributeSet);
  339.  
  340. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetBottomAttributeSet(
  341.     TQ3GeometryObject        cylinder,
  342.     TQ3AttributeSet            bottomAttributeSet);
  343.  
  344. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetBottomAttributeSet(
  345.     TQ3GeometryObject        cylinder,
  346.     TQ3AttributeSet            *bottomAttributeSet);
  347.  
  348. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_SetFaceAttributeSet(
  349.     TQ3GeometryObject        cylinder,
  350.     TQ3AttributeSet            faceAttributeSet);
  351.  
  352. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_GetFaceAttributeSet(
  353.     TQ3GeometryObject        cylinder,
  354.     TQ3AttributeSet            *faceAttributeSet);
  355.  
  356. QD3D_EXPORT TQ3Status QD3D_CALL Q3Cylinder_EmptyData(
  357.     TQ3CylinderData            *cylinderData);
  358.  
  359.  
  360. /******************************************************************************
  361.  **                                                                             **
  362.  **                        Disk Data Structure Definitions                         **
  363.  **                                                                             **
  364.  *****************************************************************************/
  365.  
  366. typedef struct TQ3DiskData {
  367.     TQ3Point3D            origin;
  368.     TQ3Vector3D            majorRadius;
  369.     TQ3Vector3D         minorRadius;
  370.     float                uMin, uMax,
  371.                         vMin, vMax;
  372.     TQ3AttributeSet        diskAttributeSet;
  373. } TQ3DiskData;
  374.  
  375.  
  376. /******************************************************************************
  377.  **                                                                             **
  378.  **                                Disk Routines                                  **
  379.  **                                                                             **
  380.  *****************************************************************************/
  381.  
  382. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Disk_New(
  383.     const TQ3DiskData        *diskData);
  384.  
  385. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_Submit(
  386.     const TQ3DiskData        *diskData, 
  387.     TQ3ViewObject            view);
  388.     
  389. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetData(
  390.     TQ3GeometryObject        disk, 
  391.     const TQ3DiskData        *diskData);
  392.  
  393. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetData(
  394.     TQ3GeometryObject        disk, 
  395.     TQ3DiskData                *diskData);
  396.  
  397. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetOrigin(
  398.     TQ3GeometryObject        disk,
  399.     const TQ3Point3D        *origin);
  400.  
  401. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetMajorRadius(
  402.     TQ3GeometryObject        disk,
  403.     const TQ3Vector3D        *majorRadius);
  404.  
  405. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_SetMinorRadius(
  406.     TQ3GeometryObject        disk,
  407.     const TQ3Vector3D        *minorRadius);
  408.  
  409. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetOrigin(
  410.     TQ3GeometryObject        disk,
  411.     TQ3Point3D                *origin);
  412.  
  413. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetMajorRadius(
  414.     TQ3GeometryObject        disk,
  415.     TQ3Vector3D                *majorRadius);
  416.  
  417. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_GetMinorRadius(
  418.     TQ3GeometryObject        disk,
  419.     TQ3Vector3D                *minorRadius);
  420.         
  421. QD3D_EXPORT TQ3Status QD3D_CALL Q3Disk_EmptyData(
  422.     TQ3DiskData                *diskData);
  423.  
  424.  
  425. /******************************************************************************
  426.  **                                                                             **
  427.  **                            Data Structure Definitions                         **
  428.  **                                                                             **
  429.  *****************************************************************************/
  430.  
  431. typedef struct TQ3EllipseData {
  432.     TQ3Point3D            origin;
  433.     TQ3Vector3D            majorRadius;
  434.     TQ3Vector3D            minorRadius;
  435.     float                uMin, uMax;
  436.     TQ3AttributeSet        ellipseAttributeSet;
  437. } TQ3EllipseData;
  438.  
  439.  
  440. /******************************************************************************
  441.  **                                                                             **
  442.  **                                Ellipse Routines                             **
  443.  **                                                                             **
  444.  *****************************************************************************/
  445.  
  446. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Ellipse_New(
  447.     const TQ3EllipseData    *ellipseData);
  448.  
  449. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_Submit(
  450.     const TQ3EllipseData    *ellipseData,
  451.     TQ3ViewObject            view);
  452.     
  453. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetData(
  454.     TQ3GeometryObject        ellipse, 
  455.     const TQ3EllipseData    *ellipseData);
  456.  
  457. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetData(
  458.     TQ3GeometryObject        ellipse,
  459.     TQ3EllipseData            *ellipseData);
  460.  
  461. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetOrigin(
  462.     TQ3GeometryObject        ellipse,
  463.     const TQ3Point3D        *origin);
  464.  
  465. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetMajorRadius(
  466.     TQ3GeometryObject        ellipse,
  467.     const TQ3Vector3D        *majorRadius);
  468.  
  469. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_SetMinorRadius(
  470.     TQ3GeometryObject        ellipse,
  471.     const TQ3Vector3D        *minorRadius);
  472.  
  473. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetOrigin(
  474.     TQ3GeometryObject        ellipse,
  475.     TQ3Point3D                *origin);
  476.  
  477. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetMajorRadius(
  478.     TQ3GeometryObject        ellipse,
  479.     TQ3Vector3D                *majorRadius);
  480.  
  481. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_GetMinorRadius(
  482.     TQ3GeometryObject        ellipse,
  483.     TQ3Vector3D                *minorRadius);
  484.  
  485. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipse_EmptyData(
  486.     TQ3EllipseData            *ellipseData);
  487.  
  488.  
  489. /******************************************************************************
  490.  **                                                                          **
  491.  **                            Ellipsoid Data structures                         **
  492.  **                                                                          **
  493.  *****************************************************************************/
  494.  
  495. typedef struct TQ3EllipsoidData {
  496.     TQ3Point3D            origin;
  497.     TQ3Vector3D            orientation;
  498.     TQ3Vector3D            majorRadius;
  499.     TQ3Vector3D            minorRadius;
  500.     float                uMin, uMax,
  501.                         vMin, vMax;
  502.     TQ3EndCap            caps;
  503.     TQ3AttributeSet        interiorAttributeSet;
  504.     TQ3AttributeSet        ellipsoidAttributeSet;
  505. } TQ3EllipsoidData;
  506.  
  507.  
  508. /******************************************************************************
  509.  **                                                                          **
  510.  **                            Procedures                                        **
  511.  **                                                                          **
  512.  *****************************************************************************/
  513.  
  514. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Ellipsoid_New(
  515.     const TQ3EllipsoidData    *ellipsoidData);
  516.  
  517. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_Submit(
  518.     const TQ3EllipsoidData    *ellipsoidData, 
  519.     TQ3ViewObject            view);
  520.     
  521. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetData(
  522.     TQ3GeometryObject        ellipsoid, 
  523.     const TQ3EllipsoidData    *ellipsoidData);
  524.  
  525. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetData(
  526.     TQ3GeometryObject        ellipsoid,
  527.     TQ3EllipsoidData        *ellipsoidData);
  528.  
  529. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetOrigin(
  530.     TQ3GeometryObject        ellipsoid,
  531.     const TQ3Point3D        *origin);
  532.  
  533. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetOrientation(
  534.     TQ3GeometryObject        ellipsoid,
  535.     const TQ3Vector3D        *orientation);
  536.  
  537. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetMajorRadius(
  538.     TQ3GeometryObject        ellipsoid,
  539.     const TQ3Vector3D        *majorRadius);
  540.  
  541. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_SetMinorRadius(
  542.     TQ3GeometryObject        ellipsoid,
  543.     const TQ3Vector3D        *minorRadius);
  544.  
  545. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetOrigin(
  546.     TQ3GeometryObject        ellipsoid,
  547.     TQ3Point3D                *origin);
  548.  
  549. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetOrientation(
  550.     TQ3GeometryObject        ellipsoid,
  551.     TQ3Vector3D                *orientation);
  552.  
  553. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetMajorRadius(
  554.     TQ3GeometryObject        ellipsoid,
  555.     TQ3Vector3D                *majorRadius);
  556.  
  557. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_GetMinorRadius(
  558.     TQ3GeometryObject        ellipsoid,
  559.     TQ3Vector3D                *minorRadius);
  560.  
  561. QD3D_EXPORT TQ3Status QD3D_CALL Q3Ellipsoid_EmptyData(
  562.     TQ3EllipsoidData        *ellipsoidData);
  563.  
  564.  
  565. /******************************************************************************
  566.  **                                                                             **
  567.  **                    General Polygon Data Structure Definitions                 **
  568.  **                                                                             **
  569.  *****************************************************************************/
  570.  
  571. typedef enum TQ3GeneralPolygonShapeHint {
  572.     kQ3GeneralPolygonShapeHintComplex,
  573.     kQ3GeneralPolygonShapeHintConcave,
  574.     kQ3GeneralPolygonShapeHintConvex
  575. } TQ3GeneralPolygonShapeHint;
  576.  
  577. typedef struct TQ3GeneralPolygonContourData {
  578.     unsigned long                    numVertices;        
  579.     TQ3Vertex3D                        *vertices;            
  580. } TQ3GeneralPolygonContourData;
  581.  
  582. typedef struct TQ3GeneralPolygonData {
  583.     unsigned long                    numContours;
  584.     TQ3GeneralPolygonContourData    *contours;
  585.     TQ3GeneralPolygonShapeHint        shapeHint;
  586.     TQ3AttributeSet                    generalPolygonAttributeSet;
  587. } TQ3GeneralPolygonData;
  588.  
  589.  
  590. /******************************************************************************
  591.  **                                                                             **
  592.  **                            General polygon Routines                         **
  593.  **                                                                             **
  594.  *****************************************************************************/
  595.  
  596. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3GeneralPolygon_New(
  597.     const TQ3GeneralPolygonData        *generalPolygonData);
  598.  
  599. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_Submit(
  600.      const TQ3GeneralPolygonData    *generalPolygonData,
  601.      TQ3ViewObject                    view);
  602.     
  603. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetData(
  604.     TQ3GeometryObject                generalPolygon, 
  605.     const TQ3GeneralPolygonData        *generalPolygonData);
  606.  
  607. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetData(
  608.     TQ3GeometryObject                polygon,
  609.     TQ3GeneralPolygonData            *generalPolygonData);
  610.  
  611. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_EmptyData(
  612.     TQ3GeneralPolygonData            *generalPolygonData);
  613.  
  614. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetVertexPosition(
  615.     TQ3GeometryObject                generalPolygon,
  616.     unsigned long                    contourIndex,
  617.     unsigned long                    pointIndex,
  618.     TQ3Point3D                        *position);
  619.  
  620. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetVertexPosition(
  621.     TQ3GeometryObject                generalPolygon,
  622.     unsigned long                    contourIndex,
  623.     unsigned long                    pointIndex,
  624.     const TQ3Point3D                *position);
  625.     
  626. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetVertexAttributeSet(
  627.     TQ3GeometryObject                generalPolygon,
  628.     unsigned long                    contourIndex,
  629.     unsigned long                    pointIndex,
  630.     TQ3AttributeSet                    *attributeSet);
  631.  
  632. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetVertexAttributeSet(
  633.     TQ3GeometryObject                generalPolygon,
  634.     unsigned long                    contourIndex,
  635.     unsigned long                    pointIndex,
  636.     TQ3AttributeSet                    attributeSet);
  637.  
  638. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_SetShapeHint(
  639.     TQ3GeometryObject                generalPolygon,
  640.     TQ3GeneralPolygonShapeHint        shapeHint);
  641.  
  642. QD3D_EXPORT TQ3Status QD3D_CALL Q3GeneralPolygon_GetShapeHint(
  643.     TQ3GeometryObject                generalPolygon,
  644.     TQ3GeneralPolygonShapeHint        *shapeHint);
  645.  
  646.  
  647. /******************************************************************************
  648.  **                                                                             **
  649.  **                        Line Data Structure Definitions                         **
  650.  **                                                                             **
  651.  *****************************************************************************/
  652.  
  653. typedef struct TQ3LineData {
  654.     TQ3Vertex3D            vertices[2];
  655.     TQ3AttributeSet        lineAttributeSet;
  656. } TQ3LineData;
  657.  
  658.  
  659. /******************************************************************************
  660.  **                                                                             **
  661.  **                            Line Routines                                     **
  662.  **                                                                             **
  663.  *****************************************************************************/
  664.  
  665. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Line_New(
  666.     const TQ3LineData         *lineData);
  667.  
  668. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_Submit(
  669.     const TQ3LineData         *lineData, 
  670.     TQ3ViewObject             view);
  671.  
  672. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetData(
  673.     TQ3GeometryObject         line,
  674.     TQ3LineData             *lineData);
  675.     
  676. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetData(
  677.     TQ3GeometryObject         line,
  678.     const TQ3LineData         *lineData);
  679.     
  680. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetVertexPosition(
  681.     TQ3GeometryObject        line,
  682.     unsigned long            index,
  683.     TQ3Point3D                *position);
  684.  
  685. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetVertexPosition(
  686.     TQ3GeometryObject        line,
  687.     unsigned long            index,
  688.     const TQ3Point3D        *position);
  689.  
  690. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_GetVertexAttributeSet(
  691.     TQ3GeometryObject        line,
  692.     unsigned long            index,
  693.     TQ3AttributeSet            *attributeSet);
  694.  
  695. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_SetVertexAttributeSet(
  696.     TQ3GeometryObject        line,
  697.     unsigned long            index,
  698.     TQ3AttributeSet            attributeSet);
  699.     
  700. QD3D_EXPORT TQ3Status QD3D_CALL Q3Line_EmptyData(
  701.     TQ3LineData             *lineData);
  702.  
  703.  
  704. /******************************************************************************
  705.  **                                                                             **
  706.  **                        Marker Data Structure Definitions                     **
  707.  **                                                                             **
  708.  *****************************************************************************/
  709.  
  710. typedef struct TQ3MarkerData {
  711.     TQ3Point3D            location;
  712.     long                xOffset;
  713.     long                yOffset;
  714.     TQ3Bitmap            bitmap;
  715.     TQ3AttributeSet        markerAttributeSet;
  716. } TQ3MarkerData;
  717.  
  718.  
  719. /******************************************************************************
  720.  **                                                                             **
  721.  **                                Marker Routines                                 **
  722.  **                                                                             **
  723.  *****************************************************************************/
  724.  
  725. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Marker_New(
  726.     const TQ3MarkerData        *markerData);
  727.  
  728. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_Submit(
  729.     const TQ3MarkerData        *markerData,
  730.     TQ3ViewObject            view);
  731.     
  732. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetData(
  733.     TQ3GeometryObject        geometry, 
  734.     const TQ3MarkerData        *markerData);
  735.  
  736. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetData(
  737.     TQ3GeometryObject        geometry,
  738.     TQ3MarkerData            *markerData);
  739.  
  740. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_EmptyData(
  741.     TQ3MarkerData            *markerData);
  742.     
  743. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetPosition(
  744.     TQ3GeometryObject        marker,
  745.     TQ3Point3D                *location);
  746.  
  747. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetPosition(
  748.     TQ3GeometryObject        marker,
  749.     const TQ3Point3D        *location);
  750.     
  751. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetXOffset(
  752.     TQ3GeometryObject        marker,
  753.     long                    *xOffset);
  754.  
  755. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetXOffset(
  756.     TQ3GeometryObject        marker,
  757.     long                    xOffset);
  758.  
  759. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetYOffset(
  760.     TQ3GeometryObject        marker,
  761.     long                    *yOffset);
  762.  
  763. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetYOffset(
  764.     TQ3GeometryObject        marker,
  765.     long                    yOffset);
  766.  
  767. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_GetBitmap(
  768.     TQ3GeometryObject        marker,
  769.     TQ3Bitmap                *bitmap);
  770.  
  771. QD3D_EXPORT TQ3Status QD3D_CALL Q3Marker_SetBitmap(
  772.     TQ3GeometryObject        marker,
  773.     const TQ3Bitmap            *bitmap);
  774.  
  775.  
  776. /******************************************************************************
  777.  **                                                                             **
  778.  **                        Mesh Data Structure Definitions                         **
  779.  **                                                                             **
  780.  *****************************************************************************/
  781.  
  782. typedef struct TQ3MeshComponentPrivate     *TQ3MeshComponent;
  783. typedef struct TQ3MeshVertexPrivate     *TQ3MeshVertex;
  784. typedef struct TQ3MeshVertexPrivate     *TQ3MeshFace;
  785. typedef struct TQ3MeshEdgeRepPrivate     *TQ3MeshEdge;
  786. typedef struct TQ3MeshContourPrivate    *TQ3MeshContour;
  787.  
  788.  
  789. /******************************************************************************
  790.  **                                                                             **
  791.  **                            Mesh Routines                                      **
  792.  **                                                                             **
  793.  *****************************************************************************/
  794.  
  795. /*
  796.  *  Constructors
  797.  */
  798. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Mesh_New(
  799.     void);
  800.  
  801. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_VertexNew(
  802.     TQ3GeometryObject    mesh,
  803.     const TQ3Vertex3D    *vertex);
  804.             
  805. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FaceNew(
  806.     TQ3GeometryObject    mesh,
  807.     unsigned long        numVertices,
  808.     const TQ3MeshVertex    *vertices,
  809.     TQ3AttributeSet        attributeSet);
  810.  
  811. /*
  812.  *  Destructors
  813.  */
  814. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_VertexDelete( 
  815.     TQ3GeometryObject    mesh,
  816.     TQ3MeshVertex        vertex);
  817.  
  818. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_FaceDelete(
  819.     TQ3GeometryObject    mesh,
  820.     TQ3MeshFace            face);
  821.  
  822. /*
  823.  * Methods
  824.  */
  825. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_DelayUpdates(
  826.     TQ3GeometryObject    mesh);
  827.  
  828. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_ResumeUpdates(
  829.     TQ3GeometryObject    mesh);
  830.     
  831. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_FaceToContour(
  832.     TQ3GeometryObject    mesh,
  833.     TQ3MeshFace            containerFace,
  834.     TQ3MeshFace            face);
  835.     
  836. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_ContourToFace(
  837.     TQ3GeometryObject    mesh,
  838.     TQ3MeshContour        contour);
  839.  
  840. /*
  841.  * Mesh
  842.  */
  843. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumComponents(
  844.     TQ3GeometryObject    mesh,
  845.     unsigned long        *numComponents);
  846.  
  847. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumEdges(
  848.     TQ3GeometryObject    mesh,
  849.     unsigned long        *numEdges);
  850.  
  851. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumVertices(
  852.     TQ3GeometryObject    mesh,
  853.     unsigned long        *numVertices);
  854.  
  855. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumFaces(
  856.     TQ3GeometryObject    mesh,
  857.     unsigned long        *numFaces);
  858.  
  859. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetNumCorners(
  860.     TQ3GeometryObject    mesh,
  861.     unsigned long        *numCorners);
  862.  
  863. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetOrientable(
  864.     TQ3GeometryObject    mesh,
  865.     TQ3Boolean            *orientable);
  866.  
  867. /*
  868.  * Component
  869.  */
  870. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentNumVertices(
  871.     TQ3GeometryObject    mesh,
  872.     TQ3MeshComponent    component,
  873.     unsigned long        *numVertices);
  874.  
  875. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentNumEdges(
  876.     TQ3GeometryObject    mesh,
  877.     TQ3MeshComponent    component,
  878.     unsigned long        *numEdges);
  879.  
  880. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentBoundingBox(
  881.     TQ3GeometryObject    mesh,
  882.     TQ3MeshComponent    component,
  883.     TQ3BoundingBox        *boundingBox);
  884.  
  885. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetComponentOrientable(
  886.     TQ3GeometryObject    mesh,
  887.     TQ3MeshComponent    component,
  888.     TQ3Boolean            *orientable);
  889.  
  890. /*
  891.  * Vertex
  892.  */
  893. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexCoordinates(
  894.     TQ3GeometryObject    mesh,
  895.     TQ3MeshVertex        vertex,
  896.     TQ3Point3D            *coordinates);
  897.  
  898. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexIndex(
  899.     TQ3GeometryObject    mesh,
  900.     TQ3MeshVertex        vertex,
  901.     unsigned long        *index);
  902.  
  903. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexOnBoundary(
  904.     TQ3GeometryObject    mesh,
  905.     TQ3MeshVertex        vertex,
  906.     TQ3Boolean            *onBoundary);
  907.  
  908. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexComponent(
  909.     TQ3GeometryObject    mesh,
  910.     TQ3MeshVertex        vertex,
  911.     TQ3MeshComponent    *component);
  912.  
  913. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetVertexAttributeSet(
  914.     TQ3GeometryObject    mesh,
  915.     TQ3MeshVertex        vertex,
  916.     TQ3AttributeSet        *attributeSet);
  917.  
  918.  
  919. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetVertexCoordinates(
  920.     TQ3GeometryObject    mesh,
  921.     TQ3MeshVertex        vertex,
  922.     const TQ3Point3D    *coordinates);
  923.  
  924. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetVertexAttributeSet(
  925.     TQ3GeometryObject    mesh,
  926.     TQ3MeshVertex        vertex,
  927.     TQ3AttributeSet        attributeSet);
  928.  
  929. /*
  930.  * Face
  931.  */
  932. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceNumVertices(
  933.     TQ3GeometryObject    mesh,
  934.     TQ3MeshFace            face,
  935.     unsigned long        *numVertices);
  936.  
  937. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFacePlaneEquation(
  938.     TQ3GeometryObject    mesh,
  939.     TQ3MeshFace            face,
  940.     TQ3PlaneEquation    *planeEquation);
  941.  
  942. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceNumContours(
  943.     TQ3GeometryObject    mesh,
  944.     TQ3MeshFace            face,
  945.     unsigned long        *numContours);
  946.  
  947. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceIndex(
  948.     TQ3GeometryObject    mesh,
  949.     TQ3MeshFace            face,
  950.     unsigned long        *index);
  951.  
  952. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceComponent(
  953.     TQ3GeometryObject    mesh,
  954.     TQ3MeshFace            face,
  955.     TQ3MeshComponent    *component);
  956.  
  957. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetFaceAttributeSet(
  958.     TQ3GeometryObject    mesh,
  959.     TQ3MeshFace            face,
  960.     TQ3AttributeSet        *attributeSet);
  961.  
  962.  
  963. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetFaceAttributeSet(
  964.     TQ3GeometryObject    mesh,
  965.     TQ3MeshFace            face,
  966.     TQ3AttributeSet        attributeSet);
  967.  
  968. /*
  969.  * Edge
  970.  */
  971. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeVertices(
  972.     TQ3GeometryObject    mesh,
  973.     TQ3MeshEdge            edge,
  974.     TQ3MeshVertex        *vertex1,
  975.     TQ3MeshVertex        *vertex2);
  976.  
  977. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeFaces(
  978.     TQ3GeometryObject    mesh,
  979.     TQ3MeshEdge            edge,
  980.     TQ3MeshFace            *face1,
  981.     TQ3MeshFace            *face2);
  982.  
  983. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeOnBoundary(
  984.     TQ3GeometryObject    mesh,
  985.     TQ3MeshEdge            edge,
  986.     TQ3Boolean            *onBoundary);
  987.  
  988. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeComponent(
  989.     TQ3GeometryObject    mesh,
  990.     TQ3MeshEdge            edge,
  991.     TQ3MeshComponent    *component);
  992.  
  993. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetEdgeAttributeSet(
  994.     TQ3GeometryObject    mesh,
  995.     TQ3MeshEdge            edge,
  996.     TQ3AttributeSet        *attributeSet);
  997.     
  998.  
  999. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetEdgeAttributeSet(
  1000.     TQ3GeometryObject    mesh,
  1001.     TQ3MeshEdge            edge,
  1002.     TQ3AttributeSet        attributeSet);
  1003.     
  1004. /*
  1005.  * Contour
  1006.  */
  1007. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetContourFace(
  1008.     TQ3GeometryObject    mesh,
  1009.     TQ3MeshContour        contour,
  1010.     TQ3MeshFace            *face);
  1011.  
  1012. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetContourNumVertices(
  1013.     TQ3GeometryObject    mesh,
  1014.     TQ3MeshContour        contour,
  1015.     unsigned long        *numVertices);
  1016.  
  1017. /*
  1018.  * Corner
  1019.  */
  1020. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_GetCornerAttributeSet(
  1021.     TQ3GeometryObject    mesh,
  1022.     TQ3MeshVertex        vertex,
  1023.     TQ3MeshFace            face,
  1024.     TQ3AttributeSet        *attributeSet);
  1025.  
  1026. QD3D_EXPORT TQ3Status QD3D_CALL Q3Mesh_SetCornerAttributeSet(
  1027.     TQ3GeometryObject    mesh,
  1028.     TQ3MeshVertex        vertex,
  1029.     TQ3MeshFace            face,
  1030.     TQ3AttributeSet        attributeSet);
  1031.  
  1032. /*
  1033.  * Public Mesh Iterators
  1034.  */
  1035. typedef struct TQ3MeshIterator {
  1036.     void                *var1;
  1037.     void                *var2;
  1038.     void                *var3;
  1039.     struct {
  1040.         void            *field1;
  1041.         char            field2[4];
  1042.     } var4;
  1043. } TQ3MeshIterator;
  1044.  
  1045. QD3D_EXPORT TQ3MeshComponent QD3D_CALL Q3Mesh_FirstMeshComponent(
  1046.     TQ3GeometryObject    mesh,
  1047.     TQ3MeshIterator        *iterator);
  1048.     
  1049. QD3D_EXPORT TQ3MeshComponent QD3D_CALL Q3Mesh_NextMeshComponent(
  1050.     TQ3MeshIterator        *iterator);
  1051.  
  1052. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstComponentVertex(
  1053.     TQ3MeshComponent    component,
  1054.     TQ3MeshIterator        *iterator);
  1055.     
  1056. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextComponentVertex(
  1057.     TQ3MeshIterator        *iterator);
  1058.  
  1059. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstComponentEdge(
  1060.     TQ3MeshComponent    component,
  1061.     TQ3MeshIterator        *iterator);
  1062.     
  1063. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextComponentEdge(
  1064.     TQ3MeshIterator        *iterator);
  1065.  
  1066. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstMeshVertex(
  1067.     TQ3GeometryObject    mesh,
  1068.     TQ3MeshIterator        *iterator);
  1069.  
  1070. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextMeshVertex(
  1071.     TQ3MeshIterator        *iterator);
  1072.  
  1073. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstMeshFace(
  1074.     TQ3GeometryObject    mesh,
  1075.     TQ3MeshIterator        *iterator);
  1076.  
  1077. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextMeshFace(
  1078.     TQ3MeshIterator        *iterator);
  1079.  
  1080. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstMeshEdge(
  1081.     TQ3GeometryObject    mesh,
  1082.     TQ3MeshIterator        *iterator);
  1083.  
  1084. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextMeshEdge(
  1085.     TQ3MeshIterator        *iterator);
  1086.  
  1087. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstVertexEdge(
  1088.     TQ3MeshVertex        vertex,
  1089.     TQ3MeshIterator        *iterator);
  1090.     
  1091. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextVertexEdge(
  1092.     TQ3MeshIterator        *iterator);
  1093.  
  1094. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstVertexVertex(
  1095.     TQ3MeshVertex        vertex,
  1096.     TQ3MeshIterator        *iterator);
  1097.     
  1098. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextVertexVertex(
  1099.     TQ3MeshIterator        *iterator);
  1100.  
  1101. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstVertexFace(
  1102.     TQ3MeshVertex        vertex,
  1103.     TQ3MeshIterator        *iterator);
  1104.     
  1105. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextVertexFace(
  1106.     TQ3MeshIterator        *iterator);
  1107.  
  1108. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstFaceEdge(
  1109.     TQ3MeshFace            face,
  1110.     TQ3MeshIterator        *iterator);
  1111.     
  1112. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextFaceEdge(
  1113.     TQ3MeshIterator        *iterator);
  1114.  
  1115. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstFaceVertex(
  1116.     TQ3MeshFace            face,
  1117.     TQ3MeshIterator        *iterator);
  1118.     
  1119. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextFaceVertex(
  1120.     TQ3MeshIterator        *iterator);
  1121.  
  1122. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstFaceFace(
  1123.     TQ3MeshFace            face,
  1124.     TQ3MeshIterator        *iterator);
  1125.     
  1126. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextFaceFace(
  1127.     TQ3MeshIterator        *iterator);
  1128.  
  1129. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_FirstFaceContour(
  1130.     TQ3MeshFace            face,
  1131.     TQ3MeshIterator        *iterator);
  1132.  
  1133. QD3D_EXPORT TQ3MeshContour QD3D_CALL Q3Mesh_NextFaceContour(
  1134.     TQ3MeshIterator        *iterator);
  1135.  
  1136. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_FirstContourEdge(
  1137.     TQ3MeshContour        contour,
  1138.     TQ3MeshIterator        *iterator);
  1139.     
  1140. QD3D_EXPORT TQ3MeshEdge QD3D_CALL Q3Mesh_NextContourEdge(
  1141.     TQ3MeshIterator        *iterator);
  1142.  
  1143. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_FirstContourVertex(
  1144.     TQ3MeshContour        contour,
  1145.     TQ3MeshIterator        *iterator);
  1146.     
  1147. QD3D_EXPORT TQ3MeshVertex QD3D_CALL Q3Mesh_NextContourVertex(
  1148.     TQ3MeshIterator        *iterator);
  1149.  
  1150. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_FirstContourFace(
  1151.     TQ3MeshContour        contour,
  1152.     TQ3MeshIterator        *iterator);
  1153.     
  1154. QD3D_EXPORT TQ3MeshFace QD3D_CALL Q3Mesh_NextContourFace(
  1155.     TQ3MeshIterator        *iterator);
  1156.  
  1157. #define    Q3ForEachMeshComponent(m,c,i)                                        \
  1158.     for ( (c) = Q3Mesh_FirstMeshComponent((m),(i));                            \
  1159.           (c);                                                                \
  1160.           (c) = Q3Mesh_NextMeshComponent((i)) )
  1161.  
  1162. #define Q3ForEachComponentVertex(c,v,i)                                        \
  1163.     for ( (v) = Q3Mesh_FirstComponentVertex((c),(i));                        \
  1164.           (v);                                                                \
  1165.           (v) = Q3Mesh_NextComponentVertex((i)) )
  1166.           
  1167. #define Q3ForEachComponentEdge(c,e,i)                                        \
  1168.     for ( (e) = Q3Mesh_FirstComponentEdge((c),(i));                            \
  1169.           (e);                                                                \
  1170.           (e) = Q3Mesh_NextComponentEdge((i)) )
  1171.  
  1172. #define Q3ForEachMeshVertex(m,v,i)                                            \
  1173.     for ( (v) = Q3Mesh_FirstMeshVertex((m),(i));                            \
  1174.           (v);                                                                \
  1175.           (v) = Q3Mesh_NextMeshVertex((i)) )
  1176.  
  1177. #define Q3ForEachMeshFace(m,f,i)                                            \
  1178.     for ( (f) = Q3Mesh_FirstMeshFace((m),(i));                                \
  1179.           (f);                                                                \
  1180.           (f) = Q3Mesh_NextMeshFace((i)) )
  1181.  
  1182. #define Q3ForEachMeshEdge(m,e,i)                                            \
  1183.     for ( (e) = Q3Mesh_FirstMeshEdge((m),(i));                                \
  1184.           (e);                                                                \
  1185.           (e) = Q3Mesh_NextMeshEdge((i)) )
  1186.  
  1187. #define Q3ForEachVertexEdge(v,e,i)                                            \
  1188.     for ( (e) = Q3Mesh_FirstVertexEdge((v),(i));                            \
  1189.           (e);                                                                \
  1190.           (e) = Q3Mesh_NextVertexEdge((i)) )
  1191.  
  1192. #define Q3ForEachVertexVertex(v,n,i)                                        \
  1193.     for ( (n) = Q3Mesh_FirstVertexVertex((v),(i));                            \
  1194.           (n);                                                                \
  1195.           (n) = Q3Mesh_NextVertexVertex((i)) )
  1196.  
  1197. #define Q3ForEachVertexFace(v,f,i)                                            \
  1198.     for ( (f) = Q3Mesh_FirstVertexFace((v),(i));                            \
  1199.           (f);                                                                \
  1200.           (f) = Q3Mesh_NextVertexFace((i)) )
  1201.  
  1202. #define Q3ForEachFaceEdge(f,e,i)                                            \
  1203.     for ( (e) = Q3Mesh_FirstFaceEdge((f),(i));                                \
  1204.           (e);                                                                \
  1205.           (e) = Q3Mesh_NextFaceEdge((i)) )
  1206.  
  1207. #define Q3ForEachFaceVertex(f,v,i)                                            \
  1208.     for ( (v) = Q3Mesh_FirstFaceVertex((f),(i));                            \
  1209.           (v);                                                                \
  1210.           (v) = Q3Mesh_NextFaceVertex((i)) )
  1211.     
  1212. #define Q3ForEachFaceFace(f,n,i)                                            \
  1213.     for ( (n) = Q3Mesh_FirstFaceFace((f),(i));                              \
  1214.           (n);                                                                \
  1215.           (n) = Q3Mesh_NextFaceFace((i)) )
  1216.           
  1217. #define Q3ForEachFaceContour(f,h,i)                                            \
  1218.     for ( (h) = Q3Mesh_FirstFaceContour((f),(i));                            \
  1219.           (h);                                                                \
  1220.           (h) = Q3Mesh_NextFaceContour((i)) )
  1221.  
  1222. #define Q3ForEachContourEdge(h,e,i)                                            \
  1223.     for ( (e) = Q3Mesh_FirstContourEdge((h),(i));                            \
  1224.           (e);                                                                \
  1225.           (e) = Q3Mesh_NextContourEdge((i)) )
  1226.  
  1227. #define Q3ForEachContourVertex(h,v,i)                                        \
  1228.     for ( (v) = Q3Mesh_FirstContourVertex((h),(i));                            \
  1229.           (v);                                                                \
  1230.           (v) = Q3Mesh_NextContourVertex((i)) )
  1231.  
  1232. #define Q3ForEachContourFace(h,f,i)                                            \
  1233.     for ( (f) = Q3Mesh_FirstContourFace((h),(i));                            \
  1234.           (f);                                                                \
  1235.           (f) = Q3Mesh_NextContourFace((i)) )
  1236.  
  1237.  
  1238. /******************************************************************************
  1239.  **                                                                             **
  1240.  **                            Maximum order for NURB Curves                     **
  1241.  **                                                                             **
  1242.  *****************************************************************************/
  1243.  
  1244. #define kQ3NURBCurveMaxOrder    16
  1245.  
  1246.  
  1247. /******************************************************************************
  1248.  **                                                                             **
  1249.  **                            NURB CurveData Structure Definitions                         **
  1250.  **                                                                             **
  1251.  *****************************************************************************/
  1252.  
  1253. typedef struct TQ3NURBCurveData {
  1254.      unsigned long            order;
  1255.      unsigned long            numPoints;
  1256.      TQ3RationalPoint4D        *controlPoints;
  1257.      float                    *knots;
  1258.      TQ3AttributeSet            curveAttributeSet;
  1259. } TQ3NURBCurveData;
  1260.  
  1261.  
  1262. /******************************************************************************
  1263.  **                                                                             **
  1264.  **                                NURB Curve Routines                             **
  1265.  **                                                                             **
  1266.  *****************************************************************************/
  1267.  
  1268. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3NURBCurve_New(
  1269.     const TQ3NURBCurveData        *curveData);
  1270.  
  1271. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_Submit(
  1272.     const TQ3NURBCurveData        *curveData,
  1273.     TQ3ViewObject                view);
  1274.  
  1275. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetData(
  1276.     TQ3GeometryObject            curve, 
  1277.     const TQ3NURBCurveData        *nurbCurveData);
  1278.  
  1279. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetData(
  1280.     TQ3GeometryObject            curve,
  1281.     TQ3NURBCurveData            *nurbCurveData); 
  1282.  
  1283. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_EmptyData(
  1284.     TQ3NURBCurveData            *nurbCurveData);
  1285.  
  1286. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetControlPoint(
  1287.     TQ3GeometryObject            curve,
  1288.     unsigned long                pointIndex,
  1289.     const TQ3RationalPoint4D    *point4D);
  1290.     
  1291. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetControlPoint(
  1292.     TQ3GeometryObject            curve,
  1293.     unsigned long                pointIndex,
  1294.     TQ3RationalPoint4D            *point4D);
  1295.  
  1296. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_SetKnot(
  1297.     TQ3GeometryObject            curve,
  1298.     unsigned long                knotIndex,
  1299.     float                        knotValue);
  1300.  
  1301. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBCurve_GetKnot(
  1302.     TQ3GeometryObject            curve,
  1303.     unsigned long                knotIndex,
  1304.     float                        *knotValue);
  1305.  
  1306.  
  1307. /******************************************************************************
  1308.  **                                                                             **
  1309.  **                            Maximum NURB Patch Order                         **
  1310.  **                                                                             **
  1311.  *****************************************************************************/
  1312.  
  1313. #define    kQ3NURBPatchMaxOrder    11
  1314.  
  1315. /******************************************************************************
  1316.  **                                                                             **
  1317.  **                        NURB Patch Data Structure Definitions                 **
  1318.  **                                                                             **
  1319.  *****************************************************************************/
  1320.  
  1321. typedef struct TQ3NURBPatchTrimCurveData {
  1322.      unsigned long                    order;
  1323.      unsigned long                    numPoints;
  1324.      TQ3RationalPoint3D                *controlPoints;    
  1325.     float                            *knots;    
  1326. } TQ3NURBPatchTrimCurveData;
  1327.  
  1328. typedef struct TQ3NURBPatchTrimLoopData {
  1329.     unsigned long                    numTrimCurves;
  1330.     TQ3NURBPatchTrimCurveData        *trimCurves;
  1331. } TQ3NURBPatchTrimLoopData;
  1332.  
  1333. typedef struct TQ3NURBPatchData {
  1334.     unsigned long                        uOrder;
  1335.     unsigned long                    vOrder;
  1336.     unsigned long                    numRows;
  1337.     unsigned long                        numColumns;                                  
  1338.     TQ3RationalPoint4D                *controlPoints;
  1339.     float                            *uKnots; 
  1340.     float                            *vKnots;
  1341.     unsigned long                    numTrimLoops;
  1342.     TQ3NURBPatchTrimLoopData        *trimLoops;
  1343.     TQ3AttributeSet                    patchAttributeSet;
  1344. } TQ3NURBPatchData;
  1345.  
  1346.  
  1347. /******************************************************************************
  1348.  **                                                                             **
  1349.  **                                NURB Patch Routines                             **
  1350.  **                                                                             **
  1351.  *****************************************************************************/
  1352.  
  1353. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3NURBPatch_New(
  1354.     const TQ3NURBPatchData        *nurbPatchData);
  1355.  
  1356. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_Submit(
  1357.     const TQ3NURBPatchData        *nurbPatchData,
  1358.     TQ3ViewObject                view);
  1359.  
  1360. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetData(
  1361.     TQ3GeometryObject            nurbPatch, 
  1362.     const TQ3NURBPatchData        *nurbPatchData);
  1363.  
  1364. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetData(
  1365.     TQ3GeometryObject            nurbPatch, 
  1366.     TQ3NURBPatchData            *nurbPatchData);
  1367.  
  1368. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetControlPoint(
  1369.     TQ3GeometryObject            nurbPatch,
  1370.     unsigned long                rowIndex,
  1371.     unsigned long                columnIndex,
  1372.     const TQ3RationalPoint4D    *point4D);
  1373.  
  1374. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetControlPoint(
  1375.     TQ3GeometryObject            nurbPatch,
  1376.     unsigned long                rowIndex,
  1377.     unsigned long                columnIndex,
  1378.     TQ3RationalPoint4D            *point4D);
  1379.  
  1380. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetUKnot(
  1381.     TQ3GeometryObject            nurbPatch,
  1382.     unsigned long                knotIndex,
  1383.     float                        knotValue);
  1384.  
  1385. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_SetVKnot(
  1386.     TQ3GeometryObject            nurbPatch,
  1387.     unsigned long                knotIndex,
  1388.     float                        knotValue);
  1389.     
  1390. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetUKnot(
  1391.     TQ3GeometryObject            nurbPatch,
  1392.     unsigned long                knotIndex,
  1393.     float                        *knotValue);
  1394.  
  1395. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_GetVKnot(
  1396.     TQ3GeometryObject            nurbPatch,
  1397.     unsigned long                knotIndex,
  1398.     float                        *knotValue);
  1399.  
  1400. QD3D_EXPORT TQ3Status QD3D_CALL Q3NURBPatch_EmptyData(
  1401.     TQ3NURBPatchData            *nurbPatchData);
  1402.  
  1403.  
  1404. /******************************************************************************
  1405.  **                                                                             **
  1406.  **                        Pixmap Marker Data Structure Definitions             **
  1407.  **                                                                             **
  1408.  *****************************************************************************/
  1409.  
  1410. typedef struct TQ3PixmapMarkerData {
  1411.     TQ3Point3D            position;
  1412.     long                xOffset;
  1413.     long                yOffset;
  1414.     TQ3StoragePixmap    pixmap;
  1415.     TQ3AttributeSet        pixmapMarkerAttributeSet;
  1416. } TQ3PixmapMarkerData;
  1417.  
  1418.  
  1419. /******************************************************************************
  1420.  **                                                                             **
  1421.  **                                Pixmap Marker Routines                         **
  1422.  **                                                                             **
  1423.  *****************************************************************************/
  1424.  
  1425. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3PixmapMarker_New(
  1426.     const TQ3PixmapMarkerData    *pixmapMarkerData);
  1427.  
  1428. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_Submit(
  1429.     const TQ3PixmapMarkerData    *pixmapMarkerData,
  1430.     TQ3ViewObject                view);
  1431.     
  1432. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetData(
  1433.     TQ3GeometryObject            geometry, 
  1434.     const TQ3PixmapMarkerData    *pixmapMarkerData);
  1435.  
  1436. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetData(
  1437.     TQ3GeometryObject            geometry,
  1438.     TQ3PixmapMarkerData            *pixmapMarkerData);
  1439.  
  1440. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_EmptyData(
  1441.     TQ3PixmapMarkerData            *pixmapMarkerData);
  1442.     
  1443. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetPosition(
  1444.     TQ3GeometryObject            pixmapMarker,
  1445.     TQ3Point3D                    *position);
  1446.  
  1447. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetPosition(
  1448.     TQ3GeometryObject            pixmapMarker,
  1449.     const TQ3Point3D            *position);
  1450.     
  1451. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetXOffset(
  1452.     TQ3GeometryObject            pixmapMarker,
  1453.     long                        *xOffset);
  1454.  
  1455. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetXOffset(
  1456.     TQ3GeometryObject            pixmapMarker,
  1457.     long                        xOffset);
  1458.  
  1459. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetYOffset(
  1460.     TQ3GeometryObject            pixmapMarker,
  1461.     long                        *yOffset);
  1462.  
  1463. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetYOffset(
  1464.     TQ3GeometryObject            pixmapMarker,
  1465.     long                        yOffset);
  1466.  
  1467. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_GetPixmap(
  1468.     TQ3GeometryObject            pixmapMarker,
  1469.     TQ3StoragePixmap            *pixmap);
  1470.  
  1471. QD3D_EXPORT TQ3Status QD3D_CALL Q3PixmapMarker_SetPixmap(
  1472.     TQ3GeometryObject            pixmapMarker,
  1473.     const TQ3StoragePixmap        *pixmap);
  1474.  
  1475.  
  1476. /******************************************************************************
  1477.  **                                                                             **
  1478.  **                        Point Data Structure Definitions                     **
  1479.  **                                                                             **
  1480.  *****************************************************************************/
  1481.  
  1482. typedef struct TQ3PointData {
  1483.     TQ3Point3D            point;
  1484.     TQ3AttributeSet        pointAttributeSet;
  1485. } TQ3PointData;
  1486.  
  1487.  
  1488. /******************************************************************************
  1489.  **                                                                             **
  1490.  **                                Point Routines                                 **
  1491.  **                                                                             **
  1492.  *****************************************************************************/
  1493.     
  1494. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Point_New(
  1495.     const TQ3PointData         *pointData);
  1496.  
  1497. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_Submit(
  1498.     const TQ3PointData         *pointData,
  1499.     TQ3ViewObject             view);
  1500.     
  1501. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_GetData(
  1502.     TQ3GeometryObject         point,
  1503.     TQ3PointData            *pointData);
  1504.     
  1505. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_SetData(
  1506.     TQ3GeometryObject         point,
  1507.     const TQ3PointData         *pointData);
  1508.     
  1509. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_EmptyData(
  1510.     TQ3PointData             *pointData);    
  1511.     
  1512. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_SetPosition(
  1513.     TQ3GeometryObject        point,
  1514.     const TQ3Point3D        *position);
  1515.     
  1516. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point_GetPosition(
  1517.     TQ3GeometryObject        point,
  1518.     TQ3Point3D                *position);
  1519.  
  1520.  
  1521. /******************************************************************************
  1522.  **                                                                             **
  1523.  **                        Polygon Data Structure Definitions                     **
  1524.  **                                                                             **
  1525.  *****************************************************************************/
  1526.  
  1527. typedef struct TQ3PolygonData {
  1528.     unsigned long        numVertices;        
  1529.     TQ3Vertex3D            *vertices;            
  1530.     TQ3AttributeSet        polygonAttributeSet;
  1531. } TQ3PolygonData;
  1532.  
  1533.  
  1534. /******************************************************************************
  1535.  **                                                                             **
  1536.  **                            Polygon Routines                                 **
  1537.  **                                                                             **
  1538.  *****************************************************************************/
  1539.  
  1540. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Polygon_New(
  1541.     const TQ3PolygonData    *polygonData);
  1542.  
  1543. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_Submit(
  1544.     const TQ3PolygonData    *polygonData,
  1545.     TQ3ViewObject            view);
  1546.     
  1547. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetData(
  1548.     TQ3GeometryObject        polygon, 
  1549.     const TQ3PolygonData    *polygonData);
  1550.  
  1551. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetData(
  1552.     TQ3GeometryObject        polygon,
  1553.     TQ3PolygonData            *polygonData);
  1554.  
  1555. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_EmptyData(
  1556.     TQ3PolygonData            *polygonData);
  1557.  
  1558. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetVertexPosition(
  1559.     TQ3GeometryObject        polygon,
  1560.     unsigned long            index,
  1561.     TQ3Point3D                *point);
  1562.  
  1563. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetVertexPosition(
  1564.     TQ3GeometryObject        polygon,
  1565.     unsigned long            index,
  1566.     const TQ3Point3D        *point);
  1567.  
  1568. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_GetVertexAttributeSet(
  1569.     TQ3GeometryObject        polygon,
  1570.     unsigned long            index,
  1571.     TQ3AttributeSet            *attributeSet);
  1572.  
  1573. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polygon_SetVertexAttributeSet(
  1574.     TQ3GeometryObject        polygon,
  1575.     unsigned long            index,
  1576.     TQ3AttributeSet            attributeSet);
  1577.  
  1578.  
  1579. /******************************************************************************
  1580.  **                                                                             **
  1581.  **                        Polyhedron Data Structure Definitions                 **
  1582.  **                                                                             **
  1583.  *****************************************************************************/
  1584.  
  1585. typedef enum TQ3PolyhedronEdgeMasks {
  1586.     kQ3PolyhedronEdgeNone    = 0,
  1587.     kQ3PolyhedronEdge01        = 1 << 0,
  1588.     kQ3PolyhedronEdge12        = 1 << 1,
  1589.     kQ3PolyhedronEdge20        = 1 << 2,
  1590.     kQ3PolyhedronEdgeAll    = kQ3PolyhedronEdge01     | 
  1591.                               kQ3PolyhedronEdge12    |
  1592.                               kQ3PolyhedronEdge20
  1593. } TQ3PolyhedronEdgeMasks;
  1594.  
  1595. typedef unsigned long TQ3PolyhedronEdge;
  1596.  
  1597. typedef struct TQ3PolyhedronEdgeData {
  1598.     unsigned long                vertexIndices[2];
  1599.     unsigned long                triangleIndices[2];
  1600.     TQ3AttributeSet                edgeAttributeSet;
  1601. } TQ3PolyhedronEdgeData;
  1602.     
  1603. typedef struct TQ3PolyhedronTriangleData {
  1604.     unsigned long                vertexIndices[3];
  1605.     TQ3PolyhedronEdge            edgeFlag;
  1606.     TQ3AttributeSet                triangleAttributeSet;
  1607. } TQ3PolyhedronTriangleData;
  1608.  
  1609. typedef struct TQ3PolyhedronData {
  1610.     unsigned long                numVertices;
  1611.     TQ3Vertex3D                    *vertices;
  1612.     unsigned long                numEdges;
  1613.     TQ3PolyhedronEdgeData        *edges;
  1614.     unsigned long                numTriangles;
  1615.     TQ3PolyhedronTriangleData    *triangles;
  1616.     TQ3AttributeSet                polyhedronAttributeSet;
  1617. } TQ3PolyhedronData;
  1618.  
  1619.  
  1620. /******************************************************************************
  1621.  **                                                                             **
  1622.  **                                Polyhedron Routines                             **
  1623.  **                                                                             **
  1624.  *****************************************************************************/
  1625.  
  1626. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Polyhedron_New(
  1627.     const TQ3PolyhedronData        *polyhedronData);
  1628.  
  1629. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_Submit(
  1630.     const TQ3PolyhedronData        *polyhedronData,
  1631.     TQ3ViewObject                view);
  1632.     
  1633. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetData(
  1634.     TQ3GeometryObject            polyhedron, 
  1635.     const TQ3PolyhedronData        *polyhedronData);
  1636.  
  1637. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetData(
  1638.     TQ3GeometryObject            polyhedron,
  1639.     TQ3PolyhedronData            *polyhedronData);
  1640.  
  1641. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_EmptyData(
  1642.     TQ3PolyhedronData            *polyhedronData);
  1643.     
  1644. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetVertexPosition(
  1645.     TQ3GeometryObject            polyhedron,
  1646.     unsigned long                index,
  1647.     const TQ3Point3D            *point);
  1648.     
  1649. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetVertexPosition(
  1650.     TQ3GeometryObject            polyhedron,
  1651.     unsigned long                index,
  1652.     TQ3Point3D                    *point);
  1653.  
  1654. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetVertexAttributeSet(
  1655.     TQ3GeometryObject            polyhedron,
  1656.     unsigned long                index,
  1657.     TQ3AttributeSet                attributeSet);
  1658.     
  1659. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetVertexAttributeSet(
  1660.     TQ3GeometryObject            polyhedron,
  1661.     unsigned long                index,
  1662.     TQ3AttributeSet                *attributeSet);
  1663.  
  1664. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetTriangleData(
  1665.     TQ3GeometryObject                polyhedron,
  1666.     unsigned long                    triangleIndex,
  1667.     TQ3PolyhedronTriangleData        *triangleData);
  1668.  
  1669. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetTriangleData(
  1670.     TQ3GeometryObject                polyhedron,
  1671.     unsigned long                    triangleIndex,
  1672.     const TQ3PolyhedronTriangleData    *triangleData);
  1673.  
  1674. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_GetEdgeData(
  1675.     TQ3GeometryObject            polyhedron,
  1676.     unsigned long                edgeIndex,
  1677.     TQ3PolyhedronEdgeData        *edgeData);
  1678.  
  1679. QD3D_EXPORT TQ3Status QD3D_CALL Q3Polyhedron_SetEdgeData(
  1680.     TQ3GeometryObject            polyhedron,
  1681.     unsigned long                edgeIndex,
  1682.     const TQ3PolyhedronEdgeData    *edgeData);
  1683.  
  1684.  
  1685. /******************************************************************************
  1686.  **                                                                             **
  1687.  **                        PolyLine Data Structure Definitions                     **
  1688.  **                                                                             **
  1689.  *****************************************************************************/
  1690.  
  1691. typedef struct TQ3PolyLineData {
  1692.     unsigned long       numVertices;            
  1693.     TQ3Vertex3D            *vertices;                
  1694.     TQ3AttributeSet        *segmentAttributeSet;        
  1695.     TQ3AttributeSet        polyLineAttributeSet;        
  1696. } TQ3PolyLineData;
  1697.     
  1698.  
  1699. /******************************************************************************
  1700.  **                                                                             **
  1701.  **                            PolyLine Routines                                 **
  1702.  **                                                                             **
  1703.  *****************************************************************************/
  1704.  
  1705. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3PolyLine_New(
  1706.     const TQ3PolyLineData    *polylineData);
  1707.  
  1708. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_Submit(
  1709.     const TQ3PolyLineData    *polyLineData,
  1710.     TQ3ViewObject            view);
  1711.     
  1712. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetData(
  1713.     TQ3GeometryObject        polyLine, 
  1714.     const TQ3PolyLineData    *polyLineData);
  1715.  
  1716. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetData(
  1717.     TQ3GeometryObject        polyLine,
  1718.     TQ3PolyLineData            *polyLineData);
  1719.  
  1720. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_EmptyData(
  1721.     TQ3PolyLineData            *polyLineData);
  1722.         
  1723. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetVertexPosition(
  1724.     TQ3GeometryObject        polyLine,
  1725.     unsigned long            index,
  1726.     TQ3Point3D                *position);
  1727.  
  1728. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetVertexPosition(
  1729.     TQ3GeometryObject        polyLine,
  1730.     unsigned long            index,
  1731.     const TQ3Point3D        *position);
  1732.  
  1733. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetVertexAttributeSet(
  1734.     TQ3GeometryObject        polyLine,
  1735.     unsigned long            index,
  1736.     TQ3AttributeSet            *attributeSet);
  1737.  
  1738. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetVertexAttributeSet(
  1739.     TQ3GeometryObject        polyLine,
  1740.     unsigned long            index,
  1741.     TQ3AttributeSet            attributeSet);
  1742.  
  1743. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_GetSegmentAttributeSet(
  1744.     TQ3GeometryObject        polyLine,
  1745.     unsigned long            index,
  1746.     TQ3AttributeSet            *attributeSet);
  1747.  
  1748. QD3D_EXPORT TQ3Status QD3D_CALL Q3PolyLine_SetSegmentAttributeSet(
  1749.     TQ3GeometryObject        polyLine,
  1750.     unsigned long            index,
  1751.     TQ3AttributeSet            attributeSet);
  1752.  
  1753.  
  1754. /******************************************************************************
  1755.  **                                                                             **
  1756.  **                        Torus Data Structure Definitions                     **
  1757.  **                                                                             **
  1758.  *****************************************************************************/
  1759.     
  1760. typedef struct TQ3TorusData {
  1761.     TQ3Point3D            origin;
  1762.     TQ3Vector3D            orientation;
  1763.     TQ3Vector3D            majorRadius;
  1764.     TQ3Vector3D            minorRadius;
  1765.     float                ratio;
  1766.     float                uMin, uMax,
  1767.                         vMin, vMax;
  1768.     TQ3EndCap            caps;
  1769.     TQ3AttributeSet        interiorAttributeSet;
  1770.     TQ3AttributeSet        torusAttributeSet;
  1771. } TQ3TorusData;
  1772.  
  1773.  
  1774. /******************************************************************************
  1775.  **                                                                             **
  1776.  **                                Torus Routines                                 **
  1777.  **                                                                             **
  1778.  *****************************************************************************/
  1779.  
  1780. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Torus_New(
  1781.     const TQ3TorusData        *torusData);
  1782.  
  1783. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_Submit(
  1784.     const TQ3TorusData        *torusData, 
  1785.     TQ3ViewObject            view);
  1786.     
  1787. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetData(
  1788.     TQ3GeometryObject        torus, 
  1789.     const TQ3TorusData        *torusData);
  1790.  
  1791. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetData(
  1792.     TQ3GeometryObject        torus, 
  1793.     TQ3TorusData            *torusData);
  1794.  
  1795. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetOrigin(
  1796.     TQ3GeometryObject        torus,
  1797.     const TQ3Point3D        *origin);
  1798.  
  1799. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetOrientation(
  1800.     TQ3GeometryObject        torus,
  1801.     const TQ3Vector3D        *orientation);
  1802.  
  1803. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetMajorRadius(
  1804.     TQ3GeometryObject        torus,
  1805.     const TQ3Vector3D        *majorRadius);
  1806.  
  1807. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetMinorRadius(
  1808.     TQ3GeometryObject        torus,
  1809.     const TQ3Vector3D        *minorRadius);
  1810.  
  1811. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_SetRatio(
  1812.     TQ3GeometryObject        torus,
  1813.     float                    ratio);
  1814.  
  1815. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetOrigin(
  1816.     TQ3GeometryObject        torus,
  1817.     TQ3Point3D                *origin);
  1818.  
  1819. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetOrientation(
  1820.     TQ3GeometryObject        torus,
  1821.     TQ3Vector3D                *orientation);
  1822.  
  1823. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetMajorRadius(
  1824.     TQ3GeometryObject        torus,
  1825.     TQ3Vector3D                *majorRadius);
  1826.  
  1827. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetMinorRadius(
  1828.     TQ3GeometryObject        torus,
  1829.     TQ3Vector3D                *minorRadius);
  1830.  
  1831. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_GetRatio(
  1832.     TQ3GeometryObject        torus,
  1833.      float                    *ratio);
  1834.      
  1835. QD3D_EXPORT TQ3Status QD3D_CALL Q3Torus_EmptyData(
  1836.     TQ3TorusData            *torusData);
  1837.  
  1838.  
  1839. /******************************************************************************
  1840.  **                                                                             **
  1841.  **                        Triangle Data Structure Definitions                     **
  1842.  **                                                                             **
  1843.  *****************************************************************************/
  1844.  
  1845. typedef struct TQ3TriangleData {
  1846.     TQ3Vertex3D            vertices[3];
  1847.     TQ3AttributeSet        triangleAttributeSet;
  1848. } TQ3TriangleData;
  1849.  
  1850.  
  1851. /******************************************************************************
  1852.  **                                                                             **
  1853.  **                            Triangle Routines                                 **
  1854.  **                                                                             **
  1855.  *****************************************************************************/
  1856.  
  1857. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3Triangle_New(
  1858.     const TQ3TriangleData    *triangleData);
  1859.  
  1860. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_Submit(
  1861.     const TQ3TriangleData    *triangleData,
  1862.     TQ3ViewObject            view);
  1863.     
  1864. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetData(
  1865.     TQ3GeometryObject        triangle, 
  1866.     const TQ3TriangleData    *triangleData);
  1867.  
  1868. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetData(
  1869.     TQ3GeometryObject        triangle,
  1870.     TQ3TriangleData            *triangleData);
  1871.  
  1872. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_EmptyData(
  1873.     TQ3TriangleData            *triangleData);
  1874.  
  1875. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetVertexPosition(
  1876.     TQ3GeometryObject        triangle,
  1877.     unsigned long            index,
  1878.     TQ3Point3D                *point);
  1879.  
  1880. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetVertexPosition(
  1881.     TQ3GeometryObject        triangle,
  1882.     unsigned long            index,
  1883.     const TQ3Point3D        *point);
  1884.  
  1885. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_GetVertexAttributeSet(
  1886.     TQ3GeometryObject        triangle,
  1887.     unsigned long            index,
  1888.     TQ3AttributeSet            *attributeSet);
  1889.  
  1890. QD3D_EXPORT TQ3Status QD3D_CALL Q3Triangle_SetVertexAttributeSet(
  1891.     TQ3GeometryObject        triangle,
  1892.     unsigned long             index,
  1893.     TQ3AttributeSet             attributeSet);
  1894.  
  1895.  
  1896. /******************************************************************************
  1897.  **                                                                             **
  1898.  **                        TriGrid Data Structure Definitions                     **
  1899.  **                                                                             **
  1900.  *****************************************************************************/
  1901.  
  1902. typedef struct TQ3TriGridData {
  1903.     unsigned long        numRows;            
  1904.     unsigned long        numColumns;
  1905.     TQ3Vertex3D            *vertices;            
  1906.     TQ3AttributeSet        *facetAttributeSet;
  1907.     TQ3AttributeSet        triGridAttributeSet;
  1908. } TQ3TriGridData;
  1909.  
  1910.  
  1911. /******************************************************************************
  1912.  **                                                                             **
  1913.  **                                TriGrid Routines                             **
  1914.  **                                                                             **
  1915.  *****************************************************************************/
  1916.  
  1917. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3TriGrid_New(
  1918.     const TQ3TriGridData    *triGridData);
  1919.  
  1920. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_Submit(
  1921.     const TQ3TriGridData    *triGridData,
  1922.     TQ3ViewObject            view);
  1923.     
  1924. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetData(
  1925.     TQ3GeometryObject        triGrid, 
  1926.     const TQ3TriGridData    *triGridData);
  1927.  
  1928. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetData(
  1929.     TQ3GeometryObject        triGrid,
  1930.     TQ3TriGridData            *triGridData);
  1931.  
  1932. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_EmptyData(
  1933.     TQ3TriGridData            *triGridData);
  1934.  
  1935. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetVertexPosition(
  1936.     TQ3GeometryObject        triGrid,
  1937.     unsigned long            rowIndex,
  1938.     unsigned long            columnIndex,
  1939.     TQ3Point3D                *position);
  1940.  
  1941. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetVertexPosition(
  1942.     TQ3GeometryObject        triGrid,
  1943.     unsigned long            rowIndex,
  1944.     unsigned long            columnIndex,
  1945.     const TQ3Point3D        *position);
  1946.  
  1947. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetVertexAttributeSet(
  1948.     TQ3GeometryObject        triGrid,
  1949.     unsigned long            rowIndex,
  1950.     unsigned long            columnIndex,
  1951.     TQ3AttributeSet            *attributeSet);
  1952.  
  1953. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetVertexAttributeSet(
  1954.     TQ3GeometryObject        triGrid,
  1955.     unsigned long            rowIndex,
  1956.     unsigned long            columnIndex,
  1957.     TQ3AttributeSet            attributeSet);
  1958.  
  1959. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_GetFacetAttributeSet(
  1960.     TQ3GeometryObject        triGrid,
  1961.     unsigned long            faceIndex,
  1962.     TQ3AttributeSet            *facetAttributeSet);
  1963.  
  1964. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriGrid_SetFacetAttributeSet(
  1965.     TQ3GeometryObject        triGrid,
  1966.     unsigned long            faceIndex,
  1967.     TQ3AttributeSet            facetAttributeSet);
  1968.  
  1969.  
  1970. /******************************************************************************
  1971.  **                                                                             **
  1972.  **                        TriMesh Data Structure Definitions                     **
  1973.  **                                                                             **
  1974.  *****************************************************************************/
  1975.  
  1976. typedef struct TQ3TriMeshTriangleData {
  1977.     unsigned long        pointIndices[3];
  1978. } TQ3TriMeshTriangleData;
  1979.  
  1980. typedef struct TQ3TriMeshEdgeData {
  1981.     unsigned long        pointIndices[2];
  1982.     unsigned long        triangleIndices[2];
  1983. } TQ3TriMeshEdgeData;
  1984.  
  1985. typedef struct TQ3TriMeshAttributeData {
  1986.     TQ3AttributeType    attributeType;        /* The type of attribute          */
  1987.     void                *data;                /* Pointer to the contiguous     */
  1988.                                             /* attribute data.                 */
  1989.     char                *attributeUseArray; /* This is only used with custom */
  1990.                                             /* attributes                      */
  1991. } TQ3TriMeshAttributeData;
  1992.  
  1993. typedef struct TQ3TriMeshData {
  1994.     TQ3AttributeSet                triMeshAttributeSet;
  1995.     
  1996.     unsigned long                numTriangles;
  1997.     TQ3TriMeshTriangleData        *triangles;
  1998.     
  1999.     unsigned long                numTriangleAttributeTypes;
  2000.     TQ3TriMeshAttributeData        *triangleAttributeTypes;
  2001.     
  2002.     unsigned long                numEdges;
  2003.     TQ3TriMeshEdgeData            *edges;
  2004.     
  2005.     unsigned long                numEdgeAttributeTypes;
  2006.     TQ3TriMeshAttributeData        *edgeAttributeTypes;
  2007.     
  2008.     unsigned long                numPoints;
  2009.     TQ3Point3D                    *points;
  2010.     
  2011.     unsigned long                numVertexAttributeTypes;
  2012.     TQ3TriMeshAttributeData        *vertexAttributeTypes;
  2013.  
  2014.     TQ3BoundingBox                bBox;
  2015. } TQ3TriMeshData;
  2016.  
  2017.  
  2018. /******************************************************************************
  2019.  **                                                                             **
  2020.  **                            TriMesh Routines                                 **
  2021.  **                                                                             **
  2022.  *****************************************************************************/
  2023.  
  2024. QD3D_EXPORT TQ3GeometryObject QD3D_CALL Q3TriMesh_New(
  2025.     const TQ3TriMeshData    *triMeshData);
  2026.  
  2027. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_Submit(
  2028.     const TQ3TriMeshData    *triMeshData,
  2029.     TQ3ViewObject            view);
  2030.     
  2031. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_SetData(
  2032.     TQ3GeometryObject        triMesh, 
  2033.     const TQ3TriMeshData    *triMeshData);
  2034.  
  2035. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_GetData(
  2036.     TQ3GeometryObject        triMesh,
  2037.     TQ3TriMeshData            *triMeshData);
  2038.  
  2039. QD3D_EXPORT TQ3Status QD3D_CALL Q3TriMesh_EmptyData(
  2040.     TQ3TriMeshData            *triMeshData);
  2041.     
  2042.  
  2043. #ifdef __cplusplus
  2044. }
  2045. #endif    /* __cplusplus */
  2046.  
  2047. #if defined(THINK_C) || defined(__SC__)
  2048.     #pragma SC options align=reset
  2049. #elif defined(__MWERKS__)
  2050.     #pragma enumsalwaysint reset
  2051.     #pragma align_array_members reset
  2052.     #pragma options align=reset
  2053. #elif  defined(__PPCC__)
  2054.     #pragma options align=reset
  2055. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  2056.     #pragma options enum=reset
  2057. #endif
  2058.  
  2059. #endif  /* QD3DGeometry_h  */
  2060.